# !/usr/bin/env python
# -*-coding:utf-8 -*-

"""
# File       : handle_main.py
# Time       ：2022/6/7 21:19
# Author     ：周豪权
"""
import traceback

from utils.handle_assert import AssertUtil
from utils.handle_model import verify_yaml
from utils.handle_request import logger
from utils.handle_extract import ExtractUtil
from utils.handle_request import RequestsUtil


#初始化一个ExtractUtil对象
eu = ExtractUtil()
#初始化一个AssertUtil对象
au = AssertUtil()


def stand_case_flow(caseinfo,base_url):
    new_case = verify_yaml(caseinfo)
    # 打印请求参数日志
    logger.info("接口-用例：" + new_case.name + "-" + new_case.title)
    # 交换变量（使用变量）
    new_case = eu.change(new_case)
    # print(**new_case.requests)
    # 发送请求获得响应
    resp = RequestsUtil().send_requests(base_url,**new_case.requests)
    # 如果yaml中有extract关键字，那么则提取变量
    if new_case.extract:
        for extract_key, extract_value in new_case.extract.items():  # 对extract进行循环
            eu.extract(resp, extract_key, *extract_value)  # 提取变量

    #如果yaml文件中有validate关键字且不为None，那么则调用断言方法
    try:
        if new_case.validate:
            for assert_key,assert_value in new_case.validate.items():
                au.assert_all(resp,assert_key,assert_value)
            # 写入日志
            logger.info("接口请求断言成功! \n")
        else:
            #写入日志
            logger.warning("没有断言! \n")
    except Exception as e:
        #写入日志
        logger.error("失败!  \n %s" % str(traceback.format_exc()))
        raise
